Para citar este material:
Godoy, M. C. (2019). Introdução aos modelos lineares mistos para os estudos da linguagem. PsyArXiv. https://doi.org/10.17605/OSF.IO/9T8UR
Este tutorial foi pensado com o objetivo de ensinar os conceitos básicos de Modelos Lineares Mistos e sua implementação em R no ambiente do RStudio. Apesar de haver muitos tutoriais bons sobre o tema em inglês, há pouco material desse tipo produzido em português para acadêmicos que têm pouca familiaridade com estatística. Por isso, o tutorial foi pensado para um público de pesquisadores em Ciências Humanas que têm pouco ou nenhum contato com linguagem de programação e pouco conhecimento de matemática. Para acompanhar o tutorial por conta própria, você deve conhecer os conceitos de média, mediana e distribuição normal. Além disso, fica mais fácil se você souber como funciona um histograma e um boxplot.
Se você tem conhecimento avançado em estatística ou está procurando uma discussão mais profunda sobre aspectos matemáticos de modelos lineares, esse tutorial talvez não seja para você. Se você é um pesquisador com um pouco de conhecimento sobre testes de hipóteses, mas que não domina o conceito básico de modelo linear, esse material é para você. O tutorial também é útil caso você conheça o básico de modelos lineares e queira aprender a utilizar R para fazer suas análises.
Modelos lineares são empregados para lidar com uma gama muito ampla de problemas de pesquisa. Os exemplos que serão dados nesses tutoriais refletem o tipo de pesquisa que eu realizo e conheço melhor: dados experimentais coletados em pesquisa sobre processamento de linguagem. Por isso, tenha sempre em mente que há uma série de questões que não abordarei (amostragem, detecção de outliers, desenhos experimentais etc.) que têm tratamentos específicos em áreas diferentes. Conheça bem a literatura da sua área antes de planejar uma análise de dados.
Ainda que os exemplos e dados sejam específicos de uma área, o conceito básico de modelo linear pode ser generalizado para outros campos.
O tutorial está organizado em 5 seções que, de modo geral, cobrem os seguintes assuntos:
Introdução ao R: manipulação e visualização de dados;
Modelos lineares;
Modelos lineares mistos: conceitos básicos;
Modelos lineares mistos: contrastes e testes post-hoc;
Modelos lineares mistos generalizados.
Para acompanhar o tutorial, você deverá
instalar o R: https://cran.r-project.org/
instalar o RStudio: https://www.rstudio.com/products/rstudio/download/
baixar os arquivos do curso: https://github.com/mahayanag/tutoriaRmlm
A primeira seção é uma introdução ao R e ao RStudio e aos pacotes ggplot2 e dplyr. Se você já é usuário de R e conhece os pacotes, pode seguir para a segunda seção.
Se encontrar algum erro no material, entre em contato através do e-mail mahayanag -at- gmail ou por @mahagodoy no twitter.
O conteúdo desta seção inclui:
Reprodutibilidade na ciência
R, RStudio e seu ambiente de programação
Manipulação de dados usando o pacote dplyr
Gráficos utilizando o pacote ggplot2
Na Psicologia Cognitiva, há grande debate sobre a replicabilidade dos resultados de experimentos. Muitos trabalhos não têm conseguido replicar achados amplamente divulgados na academia e na mídia, o que tem feito com que a comunidade científica busque maneiras de melhorar nossas práticas experimentais1. No contexto do que hoje chamamos de Open Science, há uma necessidade crescente de promover a transparência dos procedimentos de criação de hipóteses, coleta e análise dos resultados experimentais.
Podemos deixar nossos estudos mais transparentes criando pré-registro2 dos nossos procedimentos de coleta e análise de dados. Podemos também compartilhar nosso conjunto de dados para permitir que outros pesquisadores reproduzam nossas análises de dados e/ou identifiquem padrões ou erros que não percebemos. Ter seu trabalho questionado por outro cientista não é algo ruim ou indesejado. Pelo contrário: significa que alguém leu o que você produziu e achou interessante o suficiente para identificar erros e propôr soluções que podem ampliar a compreensão do fenômeno estudado.
Hoje, há uma série de programas disponíveis para realização de análises estatísticas, como Excel, SPSS, STATA, Minitab etc. Se a seção de análise de dados de um artigo é bem escrita, ela deve ter informações que permitam a reprodução de seus resultados por outra pessoa que queira usar qualquer um desses programas. No entanto, as análises feitas a partir desses programas seguem um procedimento de point-and-click, o que torna mais difícil (e demorada) a reprodução das análises se algum detalhe deixou de ser descrito.
Nesse contexto, o uso de linguagens de programação apresenta a vantagem de permitir a reprodutibilidade das análises realizadas de modo mais transparente e mais fácil, sem custos maiores para quem está auditando a análise. Ao compartilharmos nosso código, fica fácil para nossos pares (pareceristas ou não) seguirem todos os passos da nossa análise e identificarem possíveis erros. O uso de linguagens de programação também permite que anotemos nossas decisões no próprio código. Isso permite que, anos depois, lembremos porque tomamos determinadas decisões durante nossa análise.
Embora haja outras linguagens de programação que podem ser usadas para análise de dados, esse tutorial elege o R. Para entender um pouco como essa linguagem funciona, precisamos conhecer também o RStudio, o ambiente de programação que usaremos ao longo do tutorial.
Nesse tutorial, usamos o ambiente RStudio para escrever e rodar nossos códigos. Ele é uma interface que permite escrever o código e ver seus resultados em quatro paineis diferentes.
A cada novo grande trabalho de análise de dados (um mestrado, um doutorado, uma consultoria específica, um artigo etc.), é recomendado que você crie um novo projeto no R, uma espécie de pasta para reunir os arquivos de dados e códigos de análise desse projeto específico. Vamos aprender a fazer isso agora, criando um projeto para esse tutorial.
Abra o RStudio. Se tudo deu certo, você verá uma imagem parecida com essa:
Figura 1.1: Tela do RStudio
Vá em File > New Project e selecione New Directory para criar um diretório novo.
Figura 1.2: Criando projeto em Novo diretório
Vamos criar um novo projeto no R, uma pasta onde colocaremos todos os arquivos necessários para o curso. Para isso, selecione Empty Project
Figura 1.3: Selecionando a opção Empty Project
Em seguida, escolha a pasta onde você vai guardar desse projeto e escolha um nome para ele (eu o chamei de TutoriaRMLM e guardei na minha pasta de cursos).
Figura 1.4: Nomear novo diretório
Importe para essa nova pasta os materiais do tutorial que você baixou. São eles:
a pasta dados, com os conjuntos de dados que utilizaremos;
a pasta scripts, que contem os códigos em arquivo .R para acompanhar cada seção do tutorial e a pasta tarefas, com os gabaritos e respostas das tarefas práticas de cada seção;
a pasta arquivos_html, que apresenta cada uma das seções deste tutorial em formato html, para quem preferir acompanhar numa versão visualmente mais agradável.
Após importar todos os conjuntos de dados, você verá que as pastas dados, scripts e arquivos_html agora estão na aba Files no painel inferior direito do RStudio. Se não estiverem lá, é porque você não colocou as pastas dentro do arquivo correto. Confira esse passo.
Figura 1.5: Tela inicial do novo projeto
Para abrir um script de extensão .R, que é um script de código executável em R, basta ir na pasta em que eles estão e abrir. Vamos abrir aqui o script da primeira seção do tutorial, chamado Aula1_MLM.R. Clique na pasta de scripts dentro do RStudio e abra-o.
INSERIR IMAGEM DEPOIS
Figura 1.6: Tela inicial do tutorial
Ao abrir o script, você viu que sua tela ficou dividia em quatro painéis. Tomando a Figura 1.6 como referência, temos:
Canto superior esquerdo: aqui temos o editor de texto. Vamos escrever nossos códigos nesta área. Quando fizer um script novo, você pode criá-lo ao apertar as teclas Ctrl+Shift+N. Para salvar, faça o mesmo que você faria para um documento de word (Crtl+Shift+S ou File>Save) e salve sempre dentro do projeto R em que você está trabalhando.
Canto inferior esquerdo: é o chamado prompt. Quando você roda um comando no editor de texto, é no prompt que os comandos são rodados e é aí que você vê os resultados se for algo numérico.
Canto superior direito: possui as abas Environment, History, Connections e Build. A mais usada é a aba Environment, onde podemos verificar quais variáveis estão presentes na memória do programa.
Canto inferior direito: possui diversas abas chamadas Files, Plots, Packages, Help e Viewer. É neste painel que veremos os gráficos plotados e os arquivos de ajuda.
Em um projeto R, a aba Files mostra os arquivos presentes na pasta. Para você voltar ao diretório anterior nessa aba, clique nos dois pontos ao lado da flecha verde que fica acima da lista de arquivos. Faça isso para voltar ao diretório raiz do projeto R que acabamos de criar.
Agora que você já está com o script da primeira seção aberto, podemos ver como o R funciona.
As primeiras linhas do seu código tratam da instalação de dois pacotes que são usados na primeira seção deste tutorial: dplyr e ggplot2. O R é uma linguagem de programação que executa funções que você escreve ou que estão previstas em um de seus inúmeros pacotes. Alguns pacotes servem para análise estatística, outros para manipulação ou viasualização de dados, alguns para produzir apresentações de slides, documentos em html ou pdf (o material deste tutorial foi todo feito com R!). Usamos a função install.packages() para instalar os dois pacotes que vamos usar nesta seção. Para executar o código, deixe o cursor (aquela barrinha vertical que fica piscando) na linha do comando que deseja executar e aperte CTRL+ENTER.
# baixar pacotes
install.packages("dplyr")
install.packages("ggplot2")Uma vez que você baixe um pacote do R, você não precisa mais instalá-lo (a menos que você formate o computador ou que saia uma versão atualizada do pacote). No entanto, toda vez que você iniciar uma seção nova do RStudio ou do R, você precisará carregar os pacotes através da função library(). Como sabemos que vamos usar esses pacotes mais adiante no tutorial, já vamos carregá-los aqui (para fins de organização, é sempre bom deixar no topo do seu código todos os pacotes que precisam ser carregados ao longo do trabalho).
# carregar pacotes
library(dplyr)
library(ggplot2)Quando organizamos nossos códigos, é importante comentá-los para que outras pessoas (e nós mesmos) entendamos o que está sendo feito ali. Para criar um comentário (ou seja, uma linha que não é entendida como um código executável), você precisa iniciar a linha com o símbolo #
## Tudo que for precedido pelo símbolo # em uma linha é classificado como comentário
## Comentários não são entendidos como código, e portanto o programa não tentará executá-losO código executável é inserido em um linha nova, e seu output mostrado em um dos dois paineis da parte inferior da tela. Abaixo vamos executar a equação 2+2. Como o resultado dela é um valor numérico, aparecerá na aba prompt.
## Essa linha é um comentário. A linha abaixo é um comando. Deixe o cursor (aquela barrinha vertical que fica piscando) na linha do comando que deseja executar e aperte CTRL+ENTER. Tente fazer isso com o comando da linha abaixo.
2+2
#> [1] 4Acima, fizemos uma operação matemática. Podemos fazer operações matemáticas a partir de funções. Por exemplo, abaixo usamos a função sqrt() para calcular a raiz quadrada de 4. Dizemos aqui que 4 é o argumento da função sqrt().
# calculando a raiz quadrada de 4
sqrt(4)
#> [1] 2A função c(x, y, z) cria um vetor com os elementos x, y e z. Os códigos abaixo criam um vetor chamado idade com a idade de 4 pessoas e um vetor chamado nome com os nomes de 4 pessoas (quando criar vetores não-numéricos, não se esqueça de colocar o valor entre aspas duplas, como "x").
Ao criar esses vetores, você verá que eles aparecem como um novo objeto na área Environment, à esquerda.
ATENÇÃO! Para criar um novo objeto
xque contenha o resultado de uma função, você pode usar<-, como emx <- f(y)ou=, como emx = f(y).
# criando um vetor com 4 valores
idade <- c(34, 35, 39, 42)
# criar um vetor com 4 nomes
nomes <- c("José", "Maria", "Ana", "Pedro")Algumas das funções mais comuns são mean(), median() e sd(), que retornam a média, mediana e desvio-padrão de um conjunto de dados. A seguir, extraímos a média, mediana e desvio padrão do conjunto de dados idade.
# extraindo a média de idade
mean(idade)
#> [1] 37.5
# extraindo a mediana de idade
median(idade)
#> [1] 37
# extraindo o desvio-padrão de idade
sd(idade)
#> [1] 3.696846Quando tentamos extrair as mesmas informações da coluna nome, recebemos uma mensagem de erro: argument is not numeric or logical: returning NA[1] NA. Isso ocorre porque o argumento dessas funções deve ter natureza numérica, e a mensagem de erro nos diz que esse não é o caso para o vetor nomes.
ATENÇÃO! Sempre que receber uma mensagem de erro ao rodar seu código, leia-a atentamente. Ela geralmente te informa o que há de errado com seu código. Se você não souber interpretá-la, jogue-a no google: alguém já teve sua dúvida.
# extraindo a média de nomes
mean(nomes)
#> Warning in mean.default(nomes): argument is not numeric or logical:
#> returning NA
#> [1] NA
# extraindo a mediana de nomes
median(nomes)
#> Warning in mean.default(sort(x, partial = half + 0L:1L)[half + 0L:1L]):
#> argument is not numeric or logical: returning NA
#> [1] NA
# extraindo o desvio-padrão de nomes
sd(nomes)
#> Warning in var(if (is.vector(x) || is.factor(x)) x else as.double(x), na.rm
#> = na.rm): NAs introduced by coercion
#> [1] NAÉ possível salvar o resultado de qualquer função em um objeto de nome a sua escolha, e esses objetos são salvos na área Environment. Não use espaços, acentos e caracteres especiais no nome. Para não se confundir, não use maiúsculas: o R diferencia maísculas de minúsculas.
# criando um objeto com os resultados de uma função
media = mean(idade)
mediana = median(idade)
desvio.padrao = sd(idade)
# inspecionando os objetos criados
media
#> [1] 37.5
mediana
#> [1] 37
desvio.padrao
#> [1] 3.696846Até agora usamos o R como calculadora de contas simples, mas é claro que não é esse o uso que fazemos dele. Quando fazemos uma análise estatística, geralmente seguimos alguns passos:
Vamos começar pelo primeiro passo, entendendo exatamente o que é uma planilha e como podemos importá-la para o R.
Anteriormente, criamos um vetor chamado idade e um chamado nome. Um vetor é uma lista de elementos, todos do mesmo tipo. Com o comando data.frame(), podemos unir esses dois vetores em um dataframe.
# criando um dataframe
df = data.frame(nomes, idade)Você pode clicar no objeto df que acabamos de criar e verá que ele é uma tabela composta pelos dois vetores que tínhamos anteriormente. Para aplicar uma função a um vetor específico de um dataframe, usamos o símbolo $. Abaixo, conseguimos extrair a média do vetor idade do dataframe chamado df.
# média de idade
median(df$idade)
#> [1] 37Geralmente, quando trabalhamos com conjuntos de dados, eles estão organizados em dataframes. Para aprendermos a importar dataframes para o R, manipulá-los e extrair suas informações, vamos usar o conjunto de dados linguistas.csv. Esse conjunto de dados tem informações sobre os linguistas de 4 universidades (UFRN, UFMG e Unicamp) e foi coletado em julho de 2019. Como ele tem extensão .csv, vamos importá-lo usando a função read.csv(). Perceba que o argumento da função é o “endereço” do arquivo: ele está dentro da pasta dados, e por isso o argumento da função é "dados/linguistas.csv".
# criando o conjunto de dados chamado linguistas.total com todos os dados da planilha linguistas.csv
linguistas.total = read.csv("dados/linguistas.csv")ATENÇÃO! Para importar conjuntos de dados com outra extensão, como
.xlsxou.txt, você precisará usar outras funções, mas de uma maneira semelhante a que acabamos de fazer. No nosso tutorial usaremos apenas arquivos.csv.
Agora que importamos o conjunto de dados, vamos ver o seu conteúdo. Você pode fazer isso usando uma das opções abaixo:
# Use a função head() para ver as linhas iniciais do conjunto de dados
head(linguistas.total)
#> genero idade altura altura.2 peso tamanho.pe instituicao dialeto
#> 1 Feminino 33 157 157 54 35 UFRN Bolacha
#> 2 Feminino 23 167 167 67 36 Unicamp Bolacha
#> 3 Feminino 49 158 158 50 33 UFMG Biscoito
#> 4 Feminino 23 164 164 54 36 UFMG Biscoito
#> 5 Masculino 28 166 166 75 38 Unicamp Bolacha
#> 6 Masculino 24 174 174 57 41 UFMG Biscoito
#> deslocamento status esporte
#> 1 veículo próprio ou carona professor Sim
#> 2 veículo próprio ou carona aluno Não
#> 3 veículo próprio ou carona aluno Sim
#> 4 outro aluno Sim
#> 5 à pé aluno Sim
#> 6 transporte público aluno Não
## Use a função str() para conhecer o conjunto de dados (informação sobre número de níveis, se o vetor é numérico ou não)
str(linguistas.total)
#> 'data.frame': 67 obs. of 11 variables:
#> $ genero : Factor w/ 2 levels "Feminino","Masculino": 1 1 1 1 2 2 1 2 1 1 ...
#> $ idade : int 33 23 49 23 28 24 41 35 53 33 ...
#> $ altura : int 157 167 158 164 166 174 160 172 163 167 ...
#> $ altura.2 : int 157 167 158 164 166 174 160 172 163 167 ...
#> $ peso : int 54 67 50 54 75 57 60 85 58 64 ...
#> $ tamanho.pe : int 35 36 33 36 38 41 36 42 36 38 ...
#> $ instituicao : Factor w/ 4 levels "Outra","UFMG",..: 3 4 2 2 4 2 4 4 2 3 ...
#> $ dialeto : Factor w/ 2 levels "Biscoito","Bolacha": 2 2 1 1 2 1 2 1 2 1 ...
#> $ deslocamento: Factor w/ 4 levels "à pé","outro",..: 4 4 4 2 1 3 4 1 3 3 ...
#> $ status : Factor w/ 2 levels "aluno","professor": 2 1 1 1 1 1 2 2 1 1 ...
#> $ esporte : Factor w/ 2 levels "Não","Sim": 2 1 2 2 2 1 1 2 2 2 ...
# Clique no conjunto na área Environment para abrir o conjunto de dados em forma de planilhaEsse conjunto de dados contém 11 variáveis:
genero: gênero do participante (apenas participantes de dois gêneros tiveram interesse em responder o questionário)
idade: idade do participante
altura: altura do participante em cm
altura.2: repetição da coluna altura
peso: peso do participante em kg
tamanho.pe: número do calçado do participante
instituicao: instituição onde o participante estuda/trabalha
dialeto: se o participante se refere a um pacote de passatempo como biscoito ou bolacha
deslocamento: como o participante se desloca até a universidade
status: posição do participante na universidade
esporte: se o participante pratica esportes
Imagine que queremos conhecer a população de linguistas da UFRN, Unicamp e UFMG. Primeiro precisamos garantir que haja apenas linguistas dessas instituições na nossa tabela. Além disso, queremos apenas participantes sejam alunos ou professores dessas instituições. A função unique() nos ajuda a ver os valores únicos do vetor de um dataframe.
# usando a função unique para ver todos os valores únicos da coluna *instituicao* no conjunto de dados
unique(linguistas.total$instituicao)
#> [1] UFRN Unicamp UFMG Outra
#> Levels: Outra UFMG UFRN Unicamp
# usando a função unique para ver todos os valores únicos da coluna *status* no conjunto de dados
unique(linguistas.total$status)
#> [1] professor aluno
#> Levels: aluno professorNosso primeiro problema será excluir a ocorrência de pessoas de outras instituições. Já que vamos limpar o conjunto de dados, também convém excluir a coluna altura.2, que é uma replicação da coluna altura.
Para fazer essas duas tarefas, usaremos o pacote dplyr, que nos ajuda a selecionar colunas e linhas a nossa escolha, criar tabelas para resumir os dados, mudar o formato do dataframe e várias outras funções. O dplyr possui funções bastante simples, mas que se usadas recursivamente, produzem resultados bastante variados.
As funções que vamos usar são:
select: seleciona variáveis baseada em seus nomes (colunas)filter: selecionas casos baseados em seus valores (linhas)summarise: resume múltiplos valores a apenas umgroup_by: agrupa dados para realizar operaçõesVamos começar com a função select() para selecionar todas as colunas que usaremos, exceto a coluna altura.2. Rode o código abaixo e perceba que o resultado é a mesma planilha que tínhamos antes, mas sem a coluna altura.2.
# selecionando apenas as colunas de interesse para o projeto
linguistas.total%>%
select(genero, idade, altura, peso, tamanho.pe, instituicao, dialeto, deslocamento, status, esporte)
#> genero idade altura peso tamanho.pe instituicao dialeto
#> 1 Feminino 33 157 54 35 UFRN Bolacha
#> 2 Feminino 23 167 67 36 Unicamp Bolacha
#> 3 Feminino 49 158 50 33 UFMG Biscoito
#> 4 Feminino 23 164 54 36 UFMG Biscoito
#> 5 Masculino 28 166 75 38 Unicamp Bolacha
#> 6 Masculino 24 174 57 41 UFMG Biscoito
#> 7 Feminino 41 160 60 36 Unicamp Bolacha
#> 8 Masculino 35 172 85 42 Unicamp Biscoito
#> 9 Feminino 53 163 58 36 UFMG Bolacha
#> 10 Feminino 33 167 64 38 UFRN Biscoito
#> 11 Feminino 25 151 54 35 UFMG Biscoito
#> 12 Feminino 19 160 50 36 UFMG Biscoito
#> 13 Feminino 21 156 63 37 UFMG Biscoito
#> 14 Feminino 28 161 57 35 UFMG Biscoito
#> 15 Feminino 26 151 56 35 UFRN Biscoito
#> 16 Feminino 39 168 70 37 UFRN Biscoito
#> 17 Masculino 31 180 102 41 Unicamp Bolacha
#> 18 Feminino 35 163 85 78 UFMG Biscoito
#> 19 Feminino 23 150 56 34 UFRN Biscoito
#> 20 Feminino 21 165 57 37 UFRN Biscoito
#> 21 Feminino 21 157 62 37 UFMG Bolacha
#> 22 Masculino 37 172 75 42 UFRN Biscoito
#> 23 Feminino 21 162 55 36 UFRN Biscoito
#> 24 Masculino 26 178 90 41 UFRN Biscoito
#> 25 Feminino 39 163 53 35 Unicamp Biscoito
#> 26 Feminino 45 168 62 37 UFMG Biscoito
#> 27 Feminino 20 157 59 34 Unicamp Bolacha
#> 28 Masculino 31 174 75 39 Unicamp Biscoito
#> 29 Masculino 22 165 77 39 Unicamp Bolacha
#> 30 Feminino 28 161 60 35 UFRN Biscoito
#> 31 Masculino 21 168 70 38 UFRN Biscoito
#> 32 Feminino 37 165 68 37 UFRN Bolacha
#> 33 Feminino 23 155 65 35 Outra Biscoito
#> 34 Feminino 56 165 61 37 Unicamp Bolacha
#> 35 Masculino 44 160 79 36 UFMG Biscoito
#> 36 Feminino 39 165 92 38 UFMG Biscoito
#> 37 Feminino 29 167 64 38 Outra Biscoito
#> 38 Feminino 33 162 80 36 Outra Bolacha
#> 39 Feminino 27 155 58 36 UFMG Bolacha
#> 40 Masculino 24 184 74 40 UFMG Bolacha
#> 41 Masculino 31 168 68 38 UFMG Bolacha
#> 42 Masculino 32 182 95 42 UFMG Bolacha
#> 43 Feminino 21 168 62 37 Outra Biscoito
#> 44 Feminino 24 160 70 35 UFRN Biscoito
#> 45 Masculino 32 173 82 40 UFRN Biscoito
#> 46 Feminino 22 165 63 36 UFRN Bolacha
#> 47 Masculino 26 178 58 43 UFMG Biscoito
#> 48 Feminino 22 175 89 38 UFMG Bolacha
#> 49 Masculino 24 175 63 39 Unicamp Bolacha
#> 50 Feminino 24 155 50 34 Unicamp Bolacha
#> 51 Feminino 21 161 65 36 Unicamp Bolacha
#> 52 Feminino 27 152 60 35 UFMG Biscoito
#> 53 Feminino 30 163 90 37 UFMG Biscoito
#> 54 Masculino 25 175 90 39 UFMG Biscoito
#> 55 Masculino 29 167 75 38 UFRN Biscoito
#> 56 Feminino 39 162 50 35 UFMG Biscoito
#> 57 Feminino 38 152 61 34 Outra Biscoito
#> 58 Feminino 28 173 87 38 UFMG Biscoito
#> 59 Masculino 25 179 95 40 Unicamp Bolacha
#> 60 Feminino 18 160 52 36 UFMG Biscoito
#> 61 Masculino 22 181 86 41 UFMG Bolacha
#> 62 Masculino 24 178 82 41 UFRN Biscoito
#> 63 Feminino 25 163 57 36 UFMG Biscoito
#> 64 Feminino 41 161 80 38 UFMG Biscoito
#> 65 Feminino 20 165 100 37 UFMG Biscoito
#> 66 Feminino 36 167 80 38 Unicamp Bolacha
#> 67 Masculino 27 181 90 41 Unicamp Bolacha
#> deslocamento status esporte
#> 1 veículo próprio ou carona professor Sim
#> 2 veículo próprio ou carona aluno Não
#> 3 veículo próprio ou carona aluno Sim
#> 4 outro aluno Sim
#> 5 à pé aluno Sim
#> 6 transporte público aluno Não
#> 7 veículo próprio ou carona professor Não
#> 8 à pé professor Sim
#> 9 transporte público aluno Sim
#> 10 transporte público aluno Sim
#> 11 veículo próprio ou carona aluno Sim
#> 12 veículo próprio ou carona aluno Não
#> 13 transporte público aluno Sim
#> 14 transporte público aluno Sim
#> 15 veículo próprio ou carona aluno Não
#> 16 veículo próprio ou carona professor Sim
#> 17 transporte público aluno Sim
#> 18 veículo próprio ou carona aluno Sim
#> 19 transporte público aluno Sim
#> 20 transporte público aluno Não
#> 21 à pé aluno Não
#> 22 veículo próprio ou carona professor Sim
#> 23 transporte público aluno Não
#> 24 transporte público aluno Sim
#> 25 veículo próprio ou carona professor Sim
#> 26 veículo próprio ou carona professor Sim
#> 27 à pé aluno Não
#> 28 veículo próprio ou carona aluno Não
#> 29 à pé aluno Não
#> 30 transporte público aluno Sim
#> 31 veículo próprio ou carona aluno Não
#> 32 veículo próprio ou carona professor Não
#> 33 veículo próprio ou carona aluno Não
#> 34 veículo próprio ou carona professor Sim
#> 35 transporte público aluno Não
#> 36 veículo próprio ou carona aluno Não
#> 37 veículo próprio ou carona aluno Sim
#> 38 veículo próprio ou carona aluno Sim
#> 39 outro aluno Sim
#> 40 à pé aluno Não
#> 41 à pé professor Sim
#> 42 à pé aluno Não
#> 43 transporte público aluno Sim
#> 44 transporte público aluno Sim
#> 45 transporte público aluno Sim
#> 46 transporte público aluno Sim
#> 47 transporte público aluno Não
#> 48 à pé aluno Sim
#> 49 transporte público aluno Não
#> 50 transporte público aluno Não
#> 51 à pé aluno Não
#> 52 transporte público aluno Não
#> 53 transporte público aluno Sim
#> 54 veículo próprio ou carona aluno Sim
#> 55 veículo próprio ou carona aluno Sim
#> 56 veículo próprio ou carona aluno Sim
#> 57 veículo próprio ou carona aluno Não
#> 58 transporte público aluno Não
#> 59 à pé aluno Sim
#> 60 veículo próprio ou carona aluno Não
#> 61 outro aluno Não
#> 62 veículo próprio ou carona aluno Sim
#> 63 veículo próprio ou carona aluno Sim
#> 64 veículo próprio ou carona aluno Não
#> 65 transporte público aluno Não
#> 66 à pé aluno Não
#> 67 à pé aluno NãoSe você prestar atenção ao código, verá que usando uma nova função, representada pelo símbolo %>%. Essa função se chama pipe e serve para levar o output de um comando para outro. Dito de outro modo, dizemos que o pipe pega o resultado de uma linha do código e usa como input para a função que está na linha subsequente. No exemplo acima, a primeira linha apenas seleciona o conjunto de dados linguistas.total, e a esse resultado aplica a função select().
Para entender o que o pipe faz, analisemos mais um exemplo. Dessa vez queremos filtrar apenas as informações de linguistas da UFRN, Unicamp e UFMG. Para isso, usamos o pipe com a função filter. A linha de filter do código abaixo pode ser lida como:
instituicao, tenham valor igual a “UFRN”, ou que na coluna instituicao, tenham valor igual a “UFMG”, ou que na coluna instituicao, tenham valor igual a “Unicamp”Note que o símbolo |, no código abaixo, corresponde ao operador lógico ou.
# selecionando apenas participantes que indicaram que trabalham/estudam na Unicamp *OU* na UFMG *OU* na UFRN
# Marcador | indica "ou"
linguistas.total%>%
filter(instituicao == "UFRN" | instituicao == "UFMG" | instituicao == "Unicamp")
#> genero idade altura altura.2 peso tamanho.pe instituicao dialeto
#> 1 Feminino 33 157 157 54 35 UFRN Bolacha
#> 2 Feminino 23 167 167 67 36 Unicamp Bolacha
#> 3 Feminino 49 158 158 50 33 UFMG Biscoito
#> 4 Feminino 23 164 164 54 36 UFMG Biscoito
#> 5 Masculino 28 166 166 75 38 Unicamp Bolacha
#> 6 Masculino 24 174 174 57 41 UFMG Biscoito
#> 7 Feminino 41 160 160 60 36 Unicamp Bolacha
#> 8 Masculino 35 172 172 85 42 Unicamp Biscoito
#> 9 Feminino 53 163 163 58 36 UFMG Bolacha
#> 10 Feminino 33 167 167 64 38 UFRN Biscoito
#> 11 Feminino 25 151 151 54 35 UFMG Biscoito
#> 12 Feminino 19 160 160 50 36 UFMG Biscoito
#> 13 Feminino 21 156 156 63 37 UFMG Biscoito
#> 14 Feminino 28 161 161 57 35 UFMG Biscoito
#> 15 Feminino 26 151 151 56 35 UFRN Biscoito
#> 16 Feminino 39 168 168 70 37 UFRN Biscoito
#> 17 Masculino 31 180 180 102 41 Unicamp Bolacha
#> 18 Feminino 35 163 163 85 78 UFMG Biscoito
#> 19 Feminino 23 150 150 56 34 UFRN Biscoito
#> 20 Feminino 21 165 165 57 37 UFRN Biscoito
#> 21 Feminino 21 157 157 62 37 UFMG Bolacha
#> 22 Masculino 37 172 172 75 42 UFRN Biscoito
#> 23 Feminino 21 162 162 55 36 UFRN Biscoito
#> 24 Masculino 26 178 178 90 41 UFRN Biscoito
#> 25 Feminino 39 163 163 53 35 Unicamp Biscoito
#> 26 Feminino 45 168 168 62 37 UFMG Biscoito
#> 27 Feminino 20 157 157 59 34 Unicamp Bolacha
#> 28 Masculino 31 174 174 75 39 Unicamp Biscoito
#> 29 Masculino 22 165 165 77 39 Unicamp Bolacha
#> 30 Feminino 28 161 161 60 35 UFRN Biscoito
#> 31 Masculino 21 168 168 70 38 UFRN Biscoito
#> 32 Feminino 37 165 165 68 37 UFRN Bolacha
#> 33 Feminino 56 165 165 61 37 Unicamp Bolacha
#> 34 Masculino 44 160 160 79 36 UFMG Biscoito
#> 35 Feminino 39 165 165 92 38 UFMG Biscoito
#> 36 Feminino 27 155 155 58 36 UFMG Bolacha
#> 37 Masculino 24 184 184 74 40 UFMG Bolacha
#> 38 Masculino 31 168 168 68 38 UFMG Bolacha
#> 39 Masculino 32 182 182 95 42 UFMG Bolacha
#> 40 Feminino 24 160 160 70 35 UFRN Biscoito
#> 41 Masculino 32 173 173 82 40 UFRN Biscoito
#> 42 Feminino 22 165 165 63 36 UFRN Bolacha
#> 43 Masculino 26 178 178 58 43 UFMG Biscoito
#> 44 Feminino 22 175 175 89 38 UFMG Bolacha
#> 45 Masculino 24 175 175 63 39 Unicamp Bolacha
#> 46 Feminino 24 155 155 50 34 Unicamp Bolacha
#> 47 Feminino 21 161 161 65 36 Unicamp Bolacha
#> 48 Feminino 27 152 152 60 35 UFMG Biscoito
#> 49 Feminino 30 163 163 90 37 UFMG Biscoito
#> 50 Masculino 25 175 175 90 39 UFMG Biscoito
#> 51 Masculino 29 167 167 75 38 UFRN Biscoito
#> 52 Feminino 39 162 162 50 35 UFMG Biscoito
#> 53 Feminino 28 173 173 87 38 UFMG Biscoito
#> 54 Masculino 25 179 179 95 40 Unicamp Bolacha
#> 55 Feminino 18 160 160 52 36 UFMG Biscoito
#> 56 Masculino 22 181 181 86 41 UFMG Bolacha
#> 57 Masculino 24 178 178 82 41 UFRN Biscoito
#> 58 Feminino 25 163 163 57 36 UFMG Biscoito
#> 59 Feminino 41 161 161 80 38 UFMG Biscoito
#> 60 Feminino 20 165 165 100 37 UFMG Biscoito
#> 61 Feminino 36 167 167 80 38 Unicamp Bolacha
#> 62 Masculino 27 181 181 90 41 Unicamp Bolacha
#> deslocamento status esporte
#> 1 veículo próprio ou carona professor Sim
#> 2 veículo próprio ou carona aluno Não
#> 3 veículo próprio ou carona aluno Sim
#> 4 outro aluno Sim
#> 5 à pé aluno Sim
#> 6 transporte público aluno Não
#> 7 veículo próprio ou carona professor Não
#> 8 à pé professor Sim
#> 9 transporte público aluno Sim
#> 10 transporte público aluno Sim
#> 11 veículo próprio ou carona aluno Sim
#> 12 veículo próprio ou carona aluno Não
#> 13 transporte público aluno Sim
#> 14 transporte público aluno Sim
#> 15 veículo próprio ou carona aluno Não
#> 16 veículo próprio ou carona professor Sim
#> 17 transporte público aluno Sim
#> 18 veículo próprio ou carona aluno Sim
#> 19 transporte público aluno Sim
#> 20 transporte público aluno Não
#> 21 à pé aluno Não
#> 22 veículo próprio ou carona professor Sim
#> 23 transporte público aluno Não
#> 24 transporte público aluno Sim
#> 25 veículo próprio ou carona professor Sim
#> 26 veículo próprio ou carona professor Sim
#> 27 à pé aluno Não
#> 28 veículo próprio ou carona aluno Não
#> 29 à pé aluno Não
#> 30 transporte público aluno Sim
#> 31 veículo próprio ou carona aluno Não
#> 32 veículo próprio ou carona professor Não
#> 33 veículo próprio ou carona professor Sim
#> 34 transporte público aluno Não
#> 35 veículo próprio ou carona aluno Não
#> 36 outro aluno Sim
#> 37 à pé aluno Não
#> 38 à pé professor Sim
#> 39 à pé aluno Não
#> 40 transporte público aluno Sim
#> 41 transporte público aluno Sim
#> 42 transporte público aluno Sim
#> 43 transporte público aluno Não
#> 44 à pé aluno Sim
#> 45 transporte público aluno Não
#> 46 transporte público aluno Não
#> 47 à pé aluno Não
#> 48 transporte público aluno Não
#> 49 transporte público aluno Sim
#> 50 veículo próprio ou carona aluno Sim
#> 51 veículo próprio ou carona aluno Sim
#> 52 veículo próprio ou carona aluno Sim
#> 53 transporte público aluno Não
#> 54 à pé aluno Sim
#> 55 veículo próprio ou carona aluno Não
#> 56 outro aluno Não
#> 57 veículo próprio ou carona aluno Sim
#> 58 veículo próprio ou carona aluno Sim
#> 59 veículo próprio ou carona aluno Não
#> 60 transporte público aluno Não
#> 61 à pé aluno Não
#> 62 à pé aluno NãoAo rodar o código acima, você verá que permaneceram na planilha de resultado apenas as observações de linguistas cujo valor da coluna instituicao era “UFMG”, “UFRN” e “Unicamp”.
Outra maneira de pedirmos a mesma seleção, obtendo o mesmo resultado, é informando que queremos a seleção de qualquer valor na coluna instituição que seja diferente de “Outra”. Rode o código abaixo e perceba que o resultado é o mesmo que obtivemos com o código anterior.
# Selecionando participantes de todas as universidades diferentes de Outra
linguistas.total%>%
filter(instituicao != "Outra")
#> genero idade altura altura.2 peso tamanho.pe instituicao dialeto
#> 1 Feminino 33 157 157 54 35 UFRN Bolacha
#> 2 Feminino 23 167 167 67 36 Unicamp Bolacha
#> 3 Feminino 49 158 158 50 33 UFMG Biscoito
#> 4 Feminino 23 164 164 54 36 UFMG Biscoito
#> 5 Masculino 28 166 166 75 38 Unicamp Bolacha
#> 6 Masculino 24 174 174 57 41 UFMG Biscoito
#> 7 Feminino 41 160 160 60 36 Unicamp Bolacha
#> 8 Masculino 35 172 172 85 42 Unicamp Biscoito
#> 9 Feminino 53 163 163 58 36 UFMG Bolacha
#> 10 Feminino 33 167 167 64 38 UFRN Biscoito
#> 11 Feminino 25 151 151 54 35 UFMG Biscoito
#> 12 Feminino 19 160 160 50 36 UFMG Biscoito
#> 13 Feminino 21 156 156 63 37 UFMG Biscoito
#> 14 Feminino 28 161 161 57 35 UFMG Biscoito
#> 15 Feminino 26 151 151 56 35 UFRN Biscoito
#> 16 Feminino 39 168 168 70 37 UFRN Biscoito
#> 17 Masculino 31 180 180 102 41 Unicamp Bolacha
#> 18 Feminino 35 163 163 85 78 UFMG Biscoito
#> 19 Feminino 23 150 150 56 34 UFRN Biscoito
#> 20 Feminino 21 165 165 57 37 UFRN Biscoito
#> 21 Feminino 21 157 157 62 37 UFMG Bolacha
#> 22 Masculino 37 172 172 75 42 UFRN Biscoito
#> 23 Feminino 21 162 162 55 36 UFRN Biscoito
#> 24 Masculino 26 178 178 90 41 UFRN Biscoito
#> 25 Feminino 39 163 163 53 35 Unicamp Biscoito
#> 26 Feminino 45 168 168 62 37 UFMG Biscoito
#> 27 Feminino 20 157 157 59 34 Unicamp Bolacha
#> 28 Masculino 31 174 174 75 39 Unicamp Biscoito
#> 29 Masculino 22 165 165 77 39 Unicamp Bolacha
#> 30 Feminino 28 161 161 60 35 UFRN Biscoito
#> 31 Masculino 21 168 168 70 38 UFRN Biscoito
#> 32 Feminino 37 165 165 68 37 UFRN Bolacha
#> 33 Feminino 56 165 165 61 37 Unicamp Bolacha
#> 34 Masculino 44 160 160 79 36 UFMG Biscoito
#> 35 Feminino 39 165 165 92 38 UFMG Biscoito
#> 36 Feminino 27 155 155 58 36 UFMG Bolacha
#> 37 Masculino 24 184 184 74 40 UFMG Bolacha
#> 38 Masculino 31 168 168 68 38 UFMG Bolacha
#> 39 Masculino 32 182 182 95 42 UFMG Bolacha
#> 40 Feminino 24 160 160 70 35 UFRN Biscoito
#> 41 Masculino 32 173 173 82 40 UFRN Biscoito
#> 42 Feminino 22 165 165 63 36 UFRN Bolacha
#> 43 Masculino 26 178 178 58 43 UFMG Biscoito
#> 44 Feminino 22 175 175 89 38 UFMG Bolacha
#> 45 Masculino 24 175 175 63 39 Unicamp Bolacha
#> 46 Feminino 24 155 155 50 34 Unicamp Bolacha
#> 47 Feminino 21 161 161 65 36 Unicamp Bolacha
#> 48 Feminino 27 152 152 60 35 UFMG Biscoito
#> 49 Feminino 30 163 163 90 37 UFMG Biscoito
#> 50 Masculino 25 175 175 90 39 UFMG Biscoito
#> 51 Masculino 29 167 167 75 38 UFRN Biscoito
#> 52 Feminino 39 162 162 50 35 UFMG Biscoito
#> 53 Feminino 28 173 173 87 38 UFMG Biscoito
#> 54 Masculino 25 179 179 95 40 Unicamp Bolacha
#> 55 Feminino 18 160 160 52 36 UFMG Biscoito
#> 56 Masculino 22 181 181 86 41 UFMG Bolacha
#> 57 Masculino 24 178 178 82 41 UFRN Biscoito
#> 58 Feminino 25 163 163 57 36 UFMG Biscoito
#> 59 Feminino 41 161 161 80 38 UFMG Biscoito
#> 60 Feminino 20 165 165 100 37 UFMG Biscoito
#> 61 Feminino 36 167 167 80 38 Unicamp Bolacha
#> 62 Masculino 27 181 181 90 41 Unicamp Bolacha
#> deslocamento status esporte
#> 1 veículo próprio ou carona professor Sim
#> 2 veículo próprio ou carona aluno Não
#> 3 veículo próprio ou carona aluno Sim
#> 4 outro aluno Sim
#> 5 à pé aluno Sim
#> 6 transporte público aluno Não
#> 7 veículo próprio ou carona professor Não
#> 8 à pé professor Sim
#> 9 transporte público aluno Sim
#> 10 transporte público aluno Sim
#> 11 veículo próprio ou carona aluno Sim
#> 12 veículo próprio ou carona aluno Não
#> 13 transporte público aluno Sim
#> 14 transporte público aluno Sim
#> 15 veículo próprio ou carona aluno Não
#> 16 veículo próprio ou carona professor Sim
#> 17 transporte público aluno Sim
#> 18 veículo próprio ou carona aluno Sim
#> 19 transporte público aluno Sim
#> 20 transporte público aluno Não
#> 21 à pé aluno Não
#> 22 veículo próprio ou carona professor Sim
#> 23 transporte público aluno Não
#> 24 transporte público aluno Sim
#> 25 veículo próprio ou carona professor Sim
#> 26 veículo próprio ou carona professor Sim
#> 27 à pé aluno Não
#> 28 veículo próprio ou carona aluno Não
#> 29 à pé aluno Não
#> 30 transporte público aluno Sim
#> 31 veículo próprio ou carona aluno Não
#> 32 veículo próprio ou carona professor Não
#> 33 veículo próprio ou carona professor Sim
#> 34 transporte público aluno Não
#> 35 veículo próprio ou carona aluno Não
#> 36 outro aluno Sim
#> 37 à pé aluno Não
#> 38 à pé professor Sim
#> 39 à pé aluno Não
#> 40 transporte público aluno Sim
#> 41 transporte público aluno Sim
#> 42 transporte público aluno Sim
#> 43 transporte público aluno Não
#> 44 à pé aluno Sim
#> 45 transporte público aluno Não
#> 46 transporte público aluno Não
#> 47 à pé aluno Não
#> 48 transporte público aluno Não
#> 49 transporte público aluno Sim
#> 50 veículo próprio ou carona aluno Sim
#> 51 veículo próprio ou carona aluno Sim
#> 52 veículo próprio ou carona aluno Sim
#> 53 transporte público aluno Não
#> 54 à pé aluno Sim
#> 55 veículo próprio ou carona aluno Não
#> 56 outro aluno Não
#> 57 veículo próprio ou carona aluno Sim
#> 58 veículo próprio ou carona aluno Sim
#> 59 veículo próprio ou carona aluno Não
#> 60 transporte público aluno Não
#> 61 à pé aluno Não
#> 62 à pé aluno NãoATENÇÃO! Note que o sinal
==indica “igual a” na seleção por meio do pipe, enquando o sinal!=indica diferente de.
É possível combinar filter e select em uma sequência de comandos, sempre sabendo que o resultado de uma linha n, através do pipe, será o input de uma linha subsequente n+1. Vejamos isso no próximo código, em que também pedimos para excluir uma pessoa que indicou 78 como número de calçado, o que é obviamente um erro.
O código abaixo opera da seguinte maneira:
Linha 1: busca o conjunto de dados linguistas.total
Linha 2: toma o resultado da Linha 1 seleciona as colunas de interesse (excluindo altura.2)
Linha 3: toma o resultado da Linha 2 e, em cima dele, aplica a função filter() para filtrar apenas observações de participantes cuja instituicao tenha valor diferente de “Outra”;
Linha 4: toma o resultado da Linha 3 e filtra observações que na coluna tamanho.pe tenha valor menor que 50.
# Selecionando as colunas de interesse
# Selecionando participantes de instituições diferentes de Outra
# Selecionando participantes com tamanho de calçado menor que 50
linguistas.total%>%
select(genero, idade, altura, peso, tamanho.pe, instituicao, dialeto, deslocamento, status, esporte)%>%
filter(instituicao != "Outra")%>%
filter(tamanho.pe < 50)
#> genero idade altura peso tamanho.pe instituicao dialeto
#> 1 Feminino 33 157 54 35 UFRN Bolacha
#> 2 Feminino 23 167 67 36 Unicamp Bolacha
#> 3 Feminino 49 158 50 33 UFMG Biscoito
#> 4 Feminino 23 164 54 36 UFMG Biscoito
#> 5 Masculino 28 166 75 38 Unicamp Bolacha
#> 6 Masculino 24 174 57 41 UFMG Biscoito
#> 7 Feminino 41 160 60 36 Unicamp Bolacha
#> 8 Masculino 35 172 85 42 Unicamp Biscoito
#> 9 Feminino 53 163 58 36 UFMG Bolacha
#> 10 Feminino 33 167 64 38 UFRN Biscoito
#> 11 Feminino 25 151 54 35 UFMG Biscoito
#> 12 Feminino 19 160 50 36 UFMG Biscoito
#> 13 Feminino 21 156 63 37 UFMG Biscoito
#> 14 Feminino 28 161 57 35 UFMG Biscoito
#> 15 Feminino 26 151 56 35 UFRN Biscoito
#> 16 Feminino 39 168 70 37 UFRN Biscoito
#> 17 Masculino 31 180 102 41 Unicamp Bolacha
#> 18 Feminino 23 150 56 34 UFRN Biscoito
#> 19 Feminino 21 165 57 37 UFRN Biscoito
#> 20 Feminino 21 157 62 37 UFMG Bolacha
#> 21 Masculino 37 172 75 42 UFRN Biscoito
#> 22 Feminino 21 162 55 36 UFRN Biscoito
#> 23 Masculino 26 178 90 41 UFRN Biscoito
#> 24 Feminino 39 163 53 35 Unicamp Biscoito
#> 25 Feminino 45 168 62 37 UFMG Biscoito
#> 26 Feminino 20 157 59 34 Unicamp Bolacha
#> 27 Masculino 31 174 75 39 Unicamp Biscoito
#> 28 Masculino 22 165 77 39 Unicamp Bolacha
#> 29 Feminino 28 161 60 35 UFRN Biscoito
#> 30 Masculino 21 168 70 38 UFRN Biscoito
#> 31 Feminino 37 165 68 37 UFRN Bolacha
#> 32 Feminino 56 165 61 37 Unicamp Bolacha
#> 33 Masculino 44 160 79 36 UFMG Biscoito
#> 34 Feminino 39 165 92 38 UFMG Biscoito
#> 35 Feminino 27 155 58 36 UFMG Bolacha
#> 36 Masculino 24 184 74 40 UFMG Bolacha
#> 37 Masculino 31 168 68 38 UFMG Bolacha
#> 38 Masculino 32 182 95 42 UFMG Bolacha
#> 39 Feminino 24 160 70 35 UFRN Biscoito
#> 40 Masculino 32 173 82 40 UFRN Biscoito
#> 41 Feminino 22 165 63 36 UFRN Bolacha
#> 42 Masculino 26 178 58 43 UFMG Biscoito
#> 43 Feminino 22 175 89 38 UFMG Bolacha
#> 44 Masculino 24 175 63 39 Unicamp Bolacha
#> 45 Feminino 24 155 50 34 Unicamp Bolacha
#> 46 Feminino 21 161 65 36 Unicamp Bolacha
#> 47 Feminino 27 152 60 35 UFMG Biscoito
#> 48 Feminino 30 163 90 37 UFMG Biscoito
#> 49 Masculino 25 175 90 39 UFMG Biscoito
#> 50 Masculino 29 167 75 38 UFRN Biscoito
#> 51 Feminino 39 162 50 35 UFMG Biscoito
#> 52 Feminino 28 173 87 38 UFMG Biscoito
#> 53 Masculino 25 179 95 40 Unicamp Bolacha
#> 54 Feminino 18 160 52 36 UFMG Biscoito
#> 55 Masculino 22 181 86 41 UFMG Bolacha
#> 56 Masculino 24 178 82 41 UFRN Biscoito
#> 57 Feminino 25 163 57 36 UFMG Biscoito
#> 58 Feminino 41 161 80 38 UFMG Biscoito
#> 59 Feminino 20 165 100 37 UFMG Biscoito
#> 60 Feminino 36 167 80 38 Unicamp Bolacha
#> 61 Masculino 27 181 90 41 Unicamp Bolacha
#> deslocamento status esporte
#> 1 veículo próprio ou carona professor Sim
#> 2 veículo próprio ou carona aluno Não
#> 3 veículo próprio ou carona aluno Sim
#> 4 outro aluno Sim
#> 5 à pé aluno Sim
#> 6 transporte público aluno Não
#> 7 veículo próprio ou carona professor Não
#> 8 à pé professor Sim
#> 9 transporte público aluno Sim
#> 10 transporte público aluno Sim
#> 11 veículo próprio ou carona aluno Sim
#> 12 veículo próprio ou carona aluno Não
#> 13 transporte público aluno Sim
#> 14 transporte público aluno Sim
#> 15 veículo próprio ou carona aluno Não
#> 16 veículo próprio ou carona professor Sim
#> 17 transporte público aluno Sim
#> 18 transporte público aluno Sim
#> 19 transporte público aluno Não
#> 20 à pé aluno Não
#> 21 veículo próprio ou carona professor Sim
#> 22 transporte público aluno Não
#> 23 transporte público aluno Sim
#> 24 veículo próprio ou carona professor Sim
#> 25 veículo próprio ou carona professor Sim
#> 26 à pé aluno Não
#> 27 veículo próprio ou carona aluno Não
#> 28 à pé aluno Não
#> 29 transporte público aluno Sim
#> 30 veículo próprio ou carona aluno Não
#> 31 veículo próprio ou carona professor Não
#> 32 veículo próprio ou carona professor Sim
#> 33 transporte público aluno Não
#> 34 veículo próprio ou carona aluno Não
#> 35 outro aluno Sim
#> 36 à pé aluno Não
#> 37 à pé professor Sim
#> 38 à pé aluno Não
#> 39 transporte público aluno Sim
#> 40 transporte público aluno Sim
#> 41 transporte público aluno Sim
#> 42 transporte público aluno Não
#> 43 à pé aluno Sim
#> 44 transporte público aluno Não
#> 45 transporte público aluno Não
#> 46 à pé aluno Não
#> 47 transporte público aluno Não
#> 48 transporte público aluno Sim
#> 49 veículo próprio ou carona aluno Sim
#> 50 veículo próprio ou carona aluno Sim
#> 51 veículo próprio ou carona aluno Sim
#> 52 transporte público aluno Não
#> 53 à pé aluno Sim
#> 54 veículo próprio ou carona aluno Não
#> 55 outro aluno Não
#> 56 veículo próprio ou carona aluno Sim
#> 57 veículo próprio ou carona aluno Sim
#> 58 veículo próprio ou carona aluno Não
#> 59 transporte público aluno Não
#> 60 à pé aluno Não
#> 61 à pé aluno NãoAgora que selecionamos apenas as observações que queríamos, vamos salvar esse novo conjunto de dados com o nome de linguistas.edit. Na última linha do código, ainda usamos a função droplevels para que, nesse novo conjunto, sejam apagados os registros dos níveis que foram descartados a partir do filtros criados.
# Criando conjunto de dados
linguistas.edit = linguistas.total%>%
select(genero, idade, altura, peso, tamanho.pe, instituicao, dialeto, deslocamento, status, esporte)%>%
filter(instituicao != "Outra")%>%
filter(tamanho.pe < 70)%>%
droplevels()Ao rodar o código, você verá o conjunto de dados linguistas.edit na sua área Environment.
É muito comum precisarmos limpar nosso conjunto de dados antes de analisá-los. Quando precisar fazer isso, evite criar planilhas diferentes para cada nova limpeza que precise fazer. O mais adequado é fazer as seleções e filtragens com o dplyr, comentando o porquê das escolhas. Se você preferir criar planilhas novas para cada filtragem, no futuro não saberá o que são todas aquelas planilhas.
Acredite em mim: é essa a minha sensação ao ver minha pasta do mestrado.
Figura 1.7: Pasta desorganizada com arquivos incompreensíveis
Olhe os códigos abaixo sem rodá-los;
Tente descobrir que código gerará uma mensagem de erro e o motivo dessa mensagem;
Rode os códigos para ver se você acertou.
# Código 1
linguistas.total%>%
select(genero, idade, altura, esporte, tamanho.pe, status)%>%
filter(instituicao != "UFMG")
# Código 2
linguistas.total%>%
select(genero, idade, altura, instituicao, esporte, status)%>%
filter(instituicao != "UFMG")Antes mesmo de fazermos nossa análise, é útil olharmos nossos dados para extrairmos algumas medidas descritivas: médias, medianas, desvio-padrão, contagem, porcentagem etc. Para aplicar funções estatísticas nas colunas do conjunto de dados e gerar tabelas com estatística descritiva, utilizamos a função summarise. O raciocício é o mesmo que usamos até aqui: o pipe recebe o resultado de uma linha e usa como input da linha seguinte.
# Criando tabela com as médias de altura e tamanho de pé a partir do conjunto linguistas.edit
linguistas.edit%>%
summarise(mean(altura),
mean(tamanho.pe))
#> mean(altura) mean(tamanho.pe)
#> 1 166.0328 37.47541
# Mesmo resultado, mas com etiquetas
linguistas.edit%>%
summarise(media_altura = mean(altura),
media_pe = mean(tamanho.pe))
#> media_altura media_pe
#> 1 166.0328 37.47541Acima, os dois códigos retornam os mesmos valores: a média de altura é de 166cm, e a média do tamanho do pé é 37.4. A única diferença é que no segundo código decidimos nomear esses valores que estamos extraindo com os nomes media_altura e media_pe. Desse jeito nossos dados ficam mais organizados.
A função summarise fica mais interessante se utilizada em conjunto com group_by. Essa última função agrupa as observações de acordo com os níveis de uma variável categórica. Veja que, com o código abaixo, primeiro pedimos para agrupar os dados pelos valores de instituição (ou seja, pelas níveis UFRN, UFMG e Unicamp), e depois pedimos para extrair as médias de altura e tamanho de pé (mean()), e também para calcular o número de ocorrências (n()) em cada um desses níveis.
# Criando tabela agrupando os participantes por instituição e para extração das médias de altura e tamanho de pé e do número de participantes
linguistas.edit%>%
group_by(instituicao)%>%
summarise(media_altura = mean(altura),
media_pe = mean(tamanho.pe),
quantidade = n())
#> # A tibble: 3 x 4
#> instituicao media_altura media_pe quantidade
#> <fct> <dbl> <dbl> <int>
#> 1 UFMG 166. 37.4 28
#> 2 UFRN 165. 37.4 17
#> 3 Unicamp 168. 37.8 16Para quem trabalha em áreas em que é preciso cruzar informação de diversos níveis para fazer contagem de ocorrências (ou extrair sua estatística descritiva), a função summary() é uma excelente maneira de extrair tabelas que resumam os dados, pois permite a seleção de combinação de múltiplas variáveis. Vamos extrair a quantidade participantes por instituição e gênero.
# Criando tabelas agrupando participantes por instituição e gênero para saber o n de cada grupo
linguistas.edit%>%
group_by(instituicao, genero)%>%
summarise(qtdd = n())
#> # A tibble: 6 x 3
#> # Groups: instituicao [3]
#> instituicao genero qtdd
#> <fct> <fct> <int>
#> 1 UFMG Feminino 20
#> 2 UFMG Masculino 8
#> 3 UFRN Feminino 11
#> 4 UFRN Masculino 6
#> 5 Unicamp Feminino 8
#> 6 Unicamp Masculino 8É possível combinar as funções que vimos até agora em um mesmo código. Olhe os códigos abaixo, tente adivinhar qual seria seu output e crie uma descrição para eles .
# Código 1
linguistas.total%>%
filter(instituicao == "Unicamp")%>%
group_by(genero)%>%
summarize(media = mean(altura))
# Código 2
linguistas.total%>%
group_by(status, deslocamento)%>%
summarise(qtt = n())A exploração gráfica de dados é crucial para entendermos sua distribuição e decidirmos que teste estatístico usar. Na próxima seção falaremos um pouco mais sobre distribuição de dados, mas aqui aprenderemos como visualizar graficamente nossos dados com um pacote chamado ggplot2.
Podemos dizer que gráficos nos ajudam a ver a relação entre uma variável resposta e uma variável explicativa. Se você quiser usar uma linguagem com menos relação de causalidade, pode chamar essas variáveis de variável resposta e variável independente (voltaremos a esses termos na seção 2).
Pense em como você tentaria demonstrar graficamente as respostas às seguintes perguntas:
- qual a relação entre altura e tamanho do pé?
- qual a relação entre gênero e altura?
- qual a relação entre a instituição e a escolha por bolacha/biscoito?
Em todos esses exemplos, temos a relação entre uma variável X que (suspeitamos) explique uma variável Y. Esperamos que a altura explique o tamanho do pé (quanto mais alto, maior o pé), que gênero explique altura (gênero masculino prevê maiores alturas) e que a instituição explique preferências por usar as palavras bolacha ou biscoito (biscoito mais comum na UFRN, bolacha mais comum na Unicamp).
O pacote de visualização gráfica de dados ggplot2 tem esse nome porque se basea no livro Grammar of Graphics, de Leland Wilkinson. A ideia principal é criar gráficos como se eles fossem frases de uma língua, em que cada elemento do gráfico é uma palavra. Ou seja, trabalha-se com o conceito de gramática de gráficos (por isso o gg em ggplot2).
Uma outra maneira de entender a função ggplot e sua sintaxe é vê-la como a tela em branco de um quadro: começamos pintando os aspectos ao fundo, mais estruturais do quadro, e depois vamos adicionando camadas (agradeço à professora Livia Oushiro por ter me apresentado essa analogia!).
Os gráficos criados com esta ferramenta são, em geral, mais bonitos do que os gráficos tradicionais do R ou de outras ferramentas similares. Uma vez que você entenda sua sintaxe básica, é muito fácil editar o gráfico em termos de cores, contornos, variáveis etc.
Para fazer um gráfico usando o ggplot2, primeiro precisamos que nossos dados estejam em um dataframe, pois não é possível trabalhar diretamente com dados de um vetor. Esse é o caso do conjunto de dados com que estamos trabalhando aqui.
DICA! Ao construir um dataframe, evite usar acentuação, caracteres especiais ou espaços nos nomes de suas variáveis. Isso evitará que você tenha problemas posteriormente com problemas de codificação.
A sintaxe básica do ggplot se dá através do comando abaixo, que define duas características importantes de um gráfico:
# sintaxe básica
ggplot(dados, aes(x = variável_explicativa, y = variável_resposta))Todo tipo de gráfico que vamos construir parte desse código, então sua primeira tarefa é sempre pensar qual é sua variável explicativa e qual é sua variável resposta. Vejamos algumas opções de visualização para as questões colocadas anteriormente.
Considere a seguinte pergunta:
Ao colocarmos essa pergunta, estamos questionando se o tamanho de uma pessoa explica o tamanho de pé que ela tem. Temos, então, nossa variável explicativa (altura) e a variável resposta (tamanho do pé), e as duas são variáveis numéricas. Uma maneira de visualizar a relação entre duas variáveis de natureza numérica é através de um gráfico de dispersão, que indica cada observação com um ponto na coordenada em que os valores das duas variáveis se cruzam. Começamos preenchendo a sintaxe básica do ggplot com nossas variáveis.
# criando a estrutura básica do nosso gráfico
ggplot(linguistas.edit, aes(x = altura, y = tamanho.pe))Se você tentou rodar o código acima, recebeu uma mensagem de erro. O erro ocorreu porque é preciso informar a geometria do gráfico, ou seja, o modo como queremos dispôr nossa informação: colunas, linhas, pontos etc.
A geometria de um gráfico de dispersão (adequado para duas variáveis numéricas) é geom_point. Inserimos um sinal + ao fim da primeira linha para indicar que continuamos “pintando” nosso gráfico na linha seguinte.
# adicionando a camada de geometria, indicando geometria de pontos
ggplot(linguistas.edit, aes(x = altura, y = tamanho.pe))+
geom_point()Agora sim temos um gráfico de dispersão que mostra que, a medida que as pessoas ficam mais altas, o tamanho de seus pés aumenta.
Devemos lembrar que dados, estética e geometria são três camadas obrigatórias de todo gráfico. Se você deixar de fora um desses elementos, seu código retornará uma mensagem de erro.
Continuemos editando eesse gráfico para deixá-lo mais informatimo. É possível que haja sobreposição dos pontos, e portanto seria interessante mexer nas características dos pontos para adicionar transparência (alpha) e para modificar seu tamanho (size).
# modificando os elementos introduzidos pela camada geometria
# o valor de alpha vai de 0 (completamente transparente) a 1 (completamente opaco)
ggplot(linguistas.edit, aes(x = altura, y = tamanho.pe))+
geom_point(size = 3, alpha = 0.3) De fato, havia sobreposição. Há mais de uma pessoa com 160cm que calça 36.
Ainda é possível adicionar um novo agrupamento de dados a partir dos elementos da geometria. Suponha que eu queira identificar, no elementro de geometria, o gênero do indivíduos. Preciso fazer isso indicando a estética dessa geometria a partir da variável genero. Afinal, como vimos, a estética é responsável por informar as variáveis que vamos usar para definir cores, plotagem, agrupamento etc.
# agrupando dados por nova variável na camada de geometria por meio de cor
ggplot(linguistas.edit, aes(x = altura, y = tamanho.pe))+
geom_point(size = 3, alpha = 0.3, aes(color = genero))Se prefere não usar cores para isso, pode usar o formato dos elementos introduzidos na geometria.
# agrupando dados por nova variável na camada de geometria por meio de formato
ggplot(linguistas.edit, aes(x = altura, y = tamanho.pe))+
geom_point(size = 3, alpha = 0.3, aes(shape = genero))
ggplot(linguistas.edit, aes(x = altura, y = peso))+
geom_point(size = 3, alpha = 0.6, colour = "red")Até o momento, vimos como mostrar graficamente a relação entre duas variáveis numéricas. No entanto, a pergunta abaixo indica que queremos ver a relação entre uma variável explicativa categórica (gênero) e uma variável resposta numérica (altura).
Para ver como uma variável categórica influencia a distribuição das observações de uma variável numérica, podemos usar um tipo de gráfico chamado boxplot. O boxplot, portanto, é a geometria do nosso gráfico.
# Criando um boxplot
ggplot(linguistas.edit, aes(x = genero, y = altura))+
geom_boxplot()Aqui assumimos que você já conhece e sabe ler um boxplot, por isso não explicaremos o que ele indica. Se você não souber, procure informações em livros ou na internet3. Não vamos usar muito boxplot no tutorial, mas é bom que você o conheça.
Para editar a aparência do boxplot, podemos usar os comandos que vimos anteriormente, mas há algumas diferenças. Rodando o código abaixo, você verá que color, alpha e shape alteram a geometria do gráfico, que nesse caso é a forma do boxplot, mas não o seu preenchimento.
DICA! É possível escolher as cores que você quer para um gráfico selecionando seu código hexadecimal. Abaixo usamos o código
#8bd5c4, que corresponde a um tom de verde.
# personalizando o gráfico: note que é possível informar a cor por sua notação RGB
ggplot(linguistas.edit, aes(x = genero, y = altura))+
geom_boxplot(alpha = 0.4, size = 4, color = "#8bd5c4")O gráfico que acabamos de fazer é meio esquisito porque, na verdade, nós não queremos mudar a cor do boxplot, mas sim o seu preenchimento. Para fazermos isso, indicamos a cor que queremos com fill.
# personalizando o gráfico: note que é possível informar a cor por sua notação RGB
ggplot(linguistas.edit, aes(x = genero, y = altura))+
geom_boxplot(fill = "#8bd5c4")E se quisermos ver as diferenças de gênero/altura por instituições? Nesse caso, é possível inserir informação sobre a variável instituicao na estética da geometria do gráfico. Note que, mais uma vez, indicamos fill, e não color, pois nesse caso trata-se do preenchimento da geometria.
# indicando preenchimento da geometria pela variável genero
ggplot(linguistas.edit, aes(x = genero, y = altura))+
geom_boxplot(aes(fill = instituicao))Outra maneira de fazer a distinção por gênero seria adicionar uma quarta camada no gráfico, chamada facet. Essa camada é útil para dividir informações do gráfico por uma variável e facilitar a comparação.
Note que o gráfico que fizemos acima permite a comparação de altura para homens ou mulheres entre as instituições, mas é difícil visualizar se as diferenças entre os dois gêneros varia de instituição para instituição.
Adicionando uma quarta camada, chamada facet, o que foi indicado nas linhas anteriores do gráfico se dividirá pela variável indicada para criar os grupos (ou facetas).
# Boxplot mostrando altura para cada gênero; um painel por instituição
ggplot(linguistas.edit, aes(x = genero, y = altura))+
geom_boxplot()+
facet_wrap(~ instituicao)É possível cruzar variáveis categóricas em facet para criar mais grupos. Abaixo, queremos ver a altura de homens e mulheres por instituição, também fazendo uma distinção entre aqueles que praticam esportes e que não praticam. Esse cruzamento de variáveis não é muito informativo, não temos nenhuma hipótese sobre porque a distribuição de altura mudaria em cada um desse grupos, mas mostramos essa possibilidade aqui apenas para vermos como facet funciona.
# criar gráficos nos 6 agrupamentos do cruzamento de instituição e esporte
# determinar número de colunas = 2 ('ncol = 2') nos painéis do facet para facilitar comparação (o default seria 3)
ggplot(linguistas.edit, aes(x = genero, y = altura))+
geom_boxplot()+
facet_wrap(~ instituicao + esporte, ncol = 2)Também é possível usar facet para outros gráficos, como os gráficos de dispersão que fizemos anteriormente.
# Criando gráficos de dispersão com painéis diferentes para cada gênero
ggplot(linguistas.edit, aes(x = altura, y = tamanho.pe))+
geom_point(size = 3, alpha = 0.3)+
facet_wrap(~ genero)Se é melhor mostrar variáveis por meio de diferentes cores em um mesmo gráfico ou se é melhor separar os gráficos por painéis diferentes usando facet é uma decisão que cabe a você!
ATENÇÃO! Quem desenha o gráfico é o
R, mas quem pensa é você! Pondere bem qual é a melhor maneira de apresentar suas informações graficamente e depois escreva o seu código.
ggplot(linguistas.edit, aes(x = status, y = idade))+
geom_boxplot(aes(fill = instituicao))Em algumas situações, nossa variável resposta também tem natureza categórica. É o que observamos na seguinte pergunta:
No caso de duas variáveis categóricas (dialeto e instituição), usa-se um gráfico de barras para indicar a quantidade ou porcentagem de uma variável em função de outra. Os códigos base do R para fazer gráficos de barra são um pouco complicados, e mesmo o ggplot2 não tem uma sintaxe amigável com a geometria geom_bar. No entanto, uma maneira simples de fazer um gráfico de barras usando o ggplot2 é combinar o uso desse pacote com o dplyr.
A combinação entre esses dois pacotes ocorre quando processamos e agrupamos os dados que queremos usando o dplyr e usamos o seu resultado para criar um gráfico. Na pergunta que nos colocamos, queremos saber o número de pessoas que fala bolacha ou biscoito em cada instituição. Comecemos por um passo simples: criar uma tabela com o número de ocorrências de cada instituição. Já sabemos fazer isso.
# Tabela indicando frequência absoluta por instituição
linguistas.edit%>%
group_by(instituicao)%>%
summarise(quantidade = n())
#> # A tibble: 3 x 2
#> instituicao quantidade
#> <fct> <int>
#> 1 UFMG 28
#> 2 UFRN 17
#> 3 Unicamp 16Para que essa tabela vire um gráfico, basta que acrescentemos o código do ggplot indicando que queremos nossa variável explicativa no eixo x (a instituição) e o número de ocorrências no eixo y. No lugar onde costumamos informar o conjunto de dados, inserimos um ponto . para indicar que o input vem do código anterior.
# Gráfico indicando frequência absoluta por instituição
linguistas.edit%>%
group_by(instituicao)%>%
summarise(quantidade = n())%>%
ggplot(., aes(x = instituicao, y = quantidade))A essa altura você já deve ter percebido que o código acima não gerou um gráfico de barras porque esquecemos de indicar sua geometria. Fazemos isso agora com a geometria geom_col:
# Gráfico de barra (coluna) indicando frequência absoluta por instituição
linguistas.edit%>%
group_by(instituicao)%>%
summarise(quantidade = n())%>%
ggplot(., aes(x = instituicao, y = quantidade))+
geom_col()O gráfico está feito, mas não mostra a proporção de quem fala bolacha ou biscoito em cada instituição. Para isso, vamos ter que pedir que nossa tabela faça o agrupamento cruzando as informações de instituicao e dialeto dialeto. Fazemos isso alterando a segunda linha do código.
# Gráfico de barra (coluna) indicando frequência absoluta por instituição x dialeto
linguistas.edit%>%
group_by(instituicao, dialeto)%>%
summarise(quantidade = n())%>%
ggplot(., aes(x = instituicao, y = quantidade))+
geom_col()Continuamos sem ver a distribuição entre os níveis da variável dialeto. Isso ocorre porque não indicamos, na estética, como queremos ver essa variável representada. Digamos que queremos vê-la no preenchimento das barras. Já sabemos que a função fill = faz isso. Inserimos essa informação na geometria do gráfico.
# Gráfico de barra (coluna) indicando frequência absoluta por instituição x dialeto com fill
linguistas.edit%>%
group_by(instituicao, dialeto)%>%
summarise(quantidade = n())%>%
ggplot(., aes(x = instituicao, y = quantidade, fill = dialeto))+
geom_col()Podemos ainda colocar as barras lado a lado (o default do ggplot é empilhar as barras).
# Gráfico de barra (coluna) indicando frequência absoluta por instituição x dialeto com fill
linguistas.edit%>%
group_by(instituicao, dialeto)%>%
summarise(quantidade = n())%>%
ggplot(., aes(x = instituicao, y = quantidade, fill = dialeto))+
geom_col(position = "dodge")Se quisermos um gráfico indicando o número de ocorrências, já temos o resultado. No entanto, às vezes queremos que a indicação venha em frequência relativa ou porcentagem para normalizar o fato de termos muito mais dados em uma condição (UFMG, no caso) do que em outras.
Para isso, usamos a função mutate() no dplyr para gerar um novo valor através da tabela que construímos antes. Nós vamos chamar esse valor de frequencia, e ele será igual o valor de quantidade dividido pela soma total de todos os valores de quantidade (esse é o cálculo que fazemos para extrair frequência relativa).
# Gráfico de barra (coluna) indicando frequência absoluta por instituição x dialeto com fill
linguistas.edit%>%
group_by(instituicao, dialeto)%>%
summarise(quantidade = n())%>%
mutate(frequencia = quantidade/sum(quantidade))
#> # A tibble: 6 x 4
#> # Groups: instituicao [3]
#> instituicao dialeto quantidade frequencia
#> <fct> <fct> <int> <dbl>
#> 1 UFMG Biscoito 20 0.714
#> 2 UFMG Bolacha 8 0.286
#> 3 UFRN Biscoito 14 0.824
#> 4 UFRN Bolacha 3 0.176
#> 5 Unicamp Biscoito 3 0.188
#> 6 Unicamp Bolacha 13 0.812A tabela nos indica que 71.4% dos linguistas da UFMG falam biscoito e 28.6% falam bolacha. Isso é muito mais informativo que apenas indicar o número de ocorrências.
Para fazer um gráfico de barras, é só continuar com o código inserindo a sintaxe do ggplot.
# Gráfico de barra (coluna) indicando frequência relativa por instituição x dialeto com fill
linguistas.edit%>%
group_by(instituicao, dialeto)%>%
summarise(quantidade = n())%>%
mutate(frequencia = quantidade/sum(quantidade))%>%
ggplot(., aes(x = instituicao, y = frequencia, fill = dialeto))+
geom_col(position = "dodge")Usando a frequência relativa, percebemos que não há muita diferença entre UFMG e UFRN. Se quisermos que nosso eixo y indique a porcentagem dos dados, é só acrescentar essa informação no gráfico.
# Gráfico de barra (coluna) indicando porcentagem por instituição x dialeto com fill
linguistas.edit%>%
group_by(instituicao, dialeto)%>%
summarise(quantidade = n())%>%
mutate(frequencia = quantidade/sum(quantidade))%>%
ggplot(., aes(x = instituicao, y = frequencia, fill = dialeto))+
geom_col(position = "dodge")+
scale_y_continuous(labels=scales::percent)Se parece muita coisa para lembrar, não se preocupe! Uma vez que você saiba o que quer fazer e conheça o básico de R, saberá buscar exemplos de códigos na internet (ou mesmo neste tutorial) e ajustar o que precisa.
DICA! Pense que aprender uma linguagem de programação é como aprender uma língua estrangeira: quanto mais você usar, mais fácil fica de lembrar as palavras e a sintaxe da sentença que você quer construir. No entanto, quem está no nível básico também consegue fazer muita coisa consultado livros e dicionários. Não tenha receio de consultar códigos prontos enquanto não consegue escrevê-los do zero!
linguistas.edit%>%
group_by(instituicao, status, deslocamento)%>%
summarise(quantidade = n())%>%
mutate(frequencia = quantidade/sum(quantidade))%>%
ggplot(., aes(x = status, y = frequencia, fill = deslocamento))+
geom_col()+
scale_y_continuous(labels=scales::percent)+
facet_wrap(~instituicao)DICA! Tenha atenção quando for usar
facet_wrapegroup_bypara um gráfico. Quando for construir a tabela nogroup_by, informe primeiro a variável que vai nofacet_wrap, depois a que vai no eixo x e, por fim, a que vai no preenchimento de cores das barras.
# Gráfico de barra mostrando a proporção (em %) de pessoas que faz atividade física em cada uma das instituições
linguistas.edit%>%
group_by(instituicao, esporte)%>%
summarise(quantidade = n())%>%
mutate(frequencia = quantidade/sum(quantidade))%>%
ggplot(., aes(x = instituicao, y = frequencia))+
geom_col()Vimos apenas algumas das possibilidades de customização de gráficos com o ggplot. Você pode alterar as cores, temas e fontes do gráfico, colocar legendas, barras de erros e outras informações que desejar. A internet e a grande comunidade de R Users são suas amigas nessa hora!
O conjunto de dados da planilha pronome.csv é um subconjunto dos dados do experimento descrito em Godoy et al. (2018) (voltaremos a esse estudo na Seção 5).
Uma das hipóteses desse estudo era a de que a interpretação do pronome ambíguo das sentenças (1) e (2) seria influenciada pelo aspecto perfectivo (“passou”) ou imperfectivo (“estava passando”) do verbo da sentença anterior. A probabilidade de escolher o referente no papel temático de alvo (e.g. Rubens) seria maior em (1) que em (2).
- Augusto passou a bola para Rubens. Ele…
- Augusto estava passando a bola para Rubens. Ele…
Para testar essa hipótese, os autores criaram sentenças semelhantes a essas e pediram para os participantes criarem continuações. Depois, analisaram as respostas para identificar se a interpretação do pronome retomava a fonte (como Augusto) ou o alvo (Rubens) e anotaram essas respostas numa planilha que você pode acessar importando o conjunto de dados pronomes.csv.
O conjunto de dados contém 6 colunas:
participante, com identificação dos participantes da pesquisa;
item, com identificação de 16 histórias utilizadas como itens experimentais;
frase, com as frases utilizadas no experimento;
aspecto, com identificação das condições de aspecto verbal: perfectivo (perfective) e imperfectivo (imperfective);
classe, uma condição experimental que entenderemos na Seção 5;
interpretacao: interpretação do pronome tal qual anotado pelos pesquisadores, e que indica interpretação de fonte (fonte), alvo (alvo) ou ambígua (ambiguo).
Para ver se a hipótese dos autores foi corroborada pelos dados, você deverá:
interpretacao para selecionar apenas os dados com os valores fonte ou alvo;Godoy, M. C.; Weissheimer, J. ; Mafra, M. A. (2018) When Grammar Meets Pragmatics: Subject Preference and Coherence Relations in Brazilian Portuguese Pronoun Interpretation. Journal of Portuguese Linguistics, v. 17, p. 17, doi: 10.5334/jpl.197
Veja uma discussão sobre o tema em https://www.theatlantic.com/science/archive/2018/11/psychologys-replication-crisis-real/576223/.↩
Veja uma discussão sobre o tema em https://www.psychologicalscience.org/observer/preregistration-becoming-the-norm-in-psychological-science↩
Uma boa explicação pode ser achada em http://www.portalaction.com.br/estatistica-basica/31-boxplot↩